package com.foodie.proxy.staticproxy;

import com.foodie.proxy.proxycase.IRentHouse;
import com.foodie.proxy.proxycase.RentHouseImpl;
import org.junit.Test;

/**
 * 静态代理测试类
 * 静态代理的特点：
 * 1)每一个接口都对应的一个接口实现类(实现类用于明确需求)
 * 2)每一个接口都对应的一个接口代理类(代理类用于功能增强)
 */
public class TestClass {
    /**
     * 模拟客户自己租房
     */
    @Test
    public void rentHoustByClient() {
        //模拟用户自己去实现租房子这件事
        IRentHouse rentHouse = new RentHouseImpl();
        rentHouse.rentHouse();
    }

    /**
     * 模仿租房代理替客户租房
     */
    @Test
    public void rentHoustByStaticRentHouseProxy() {
        //客户实现接口，明确自己的租房需求
        IRentHouse rentHouse = new RentHouseImpl();
        //客户找到代理，把需求告知代理
        StaticRentHouseProxy staticRentHouseProxy = new StaticRentHouseProxy(rentHouse);
        //代理去租房，顺便做一些其他的事情(收中介费、卖客户信息)
        staticRentHouseProxy.rentHouse();
    }
}
